--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/backend/telemetry_utils.py fa46dc4ce9ab50cbe66a7a9e4b3bca0140102345 (fa46dc4c) Text, 3.86 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72import T7ee787struct
Tff7b72import T7ee787time
Tff7b72from T7ee787RNST7ee787.T7ee787vendor Tff7b72import Te6edf3umsgpack
Tff7b72class T56d364SensorTb4b4b4:
Te6edf3SID_NONE Tff7b72= T79c0ff0x00
Te6edf3SID_TIME Tff7b72= T79c0ff0x01
Te6edf3SID_LOCATION Tff7b72= T79c0ff0x02
Te6edf3SID_PRESSURE Tff7b72= T79c0ff0x03
Te6edf3SID_BATTERY Tff7b72= T79c0ff0x04
Te6edf3SID_PHYSICAL_LINK Tff7b72= T79c0ff0x05
Te6edf3SID_ACCELERATION Tff7b72= T79c0ff0x06
Te6edf3SID_TEMPERATURE Tff7b72= T79c0ff0x07
Te6edf3SID_HUMIDITY Tff7b72= T79c0ff0x08
Te6edf3SID_MAGNETIC_FIELD Tff7b72= T79c0ff0x09
Te6edf3SID_AMBIENT_LIGHT Tff7b72= T79c0ff0x0A
Te6edf3SID_GRAVITY Tff7b72= T79c0ff0x0B
Te6edf3SID_ANGULAR_VELOCITY Tff7b72= T79c0ff0x0C
Te6edf3SID_PROXIMITY Tff7b72= T79c0ff0x0E
Te6edf3SID_INFORMATION Tff7b72= T79c0ff0x0F
Te6edf3SID_RECEIVED Tff7b72= T79c0ff0x10
Te6edf3SID_POWER_CONSUMPTION Tff7b72= T79c0ff0x11
Te6edf3SID_POWER_PRODUCTION Tff7b72= T79c0ff0x12
Te6edf3SID_PROCESSOR Tff7b72= T79c0ff0x13
Te6edf3SID_RAM Tff7b72= T79c0ff0x14
Te6edf3SID_NVM Tff7b72= T79c0ff0x15
Te6edf3SID_TANK Tff7b72= T79c0ff0x16
Te6edf3SID_FUEL Tff7b72= T79c0ff0x17
Te6edf3SID_RNS_TRANSPORT Tff7b72= T79c0ff0x19
Te6edf3SID_LXMF_PROPAGATION Tff7b72= T79c0ff0x18
Te6edf3SID_CONNECTION_MAP Tff7b72= T79c0ff0x1A
Te6edf3SID_CUSTOM Tff7b72= T79c0ff0xFF
Tff7b72class T56d364TelemeterTb4b4b4:
Tf0883e@staticmethod
Tff7b72def Td2a8ffunpack_locationTb4b4b4(Te6edf3packedTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3packed Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4: Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!iTa5d6ff"Tb4b4b4, Te6edf3packedTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72/ T79c0ff1e6Tb4b4b4,
Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4: Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!iTa5d6ff"Tb4b4b4, Te6edf3packedTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72/ T79c0ff1e6Tb4b4b4,
Ta5d6ff"Ta5d6ffaltitudeTa5d6ff"Tb4b4b4: Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!iTa5d6ff"Tb4b4b4, Te6edf3packedTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72/ T79c0ff1e2Tb4b4b4,
Ta5d6ff"Ta5d6ffspeedTa5d6ff"Tb4b4b4: Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!ITa5d6ff"Tb4b4b4, Te6edf3packedTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72/ T79c0ff1e2Tb4b4b4,
Ta5d6ff"Ta5d6ffbearingTa5d6ff"Tb4b4b4: Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!iTa5d6ff"Tb4b4b4, Te6edf3packedTb4b4b4[T79c0ff4Tb4b4b4]Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72/ T79c0ff1e2Tb4b4b4,
Ta5d6ff"Ta5d6ffaccuracyTa5d6ff"Tb4b4b4: Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!HTa5d6ff"Tb4b4b4, Te6edf3packedTb4b4b4[T79c0ff5Tb4b4b4]Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72/ T79c0ff1e2Tb4b4b4,
Ta5d6ff"Ta5d6fflast_updateTa5d6ff"Tb4b4b4: Te6edf3packedTb4b4b4[T79c0ff6Tb4b4b4]Tb4b4b4,
Tb4b4b4}
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72None
Tf0883e@staticmethod
Tff7b72def Td2a8ffpack_locationTb4b4b4(
Te6edf3latitudeTb4b4b4,
Te6edf3longitudeTb4b4b4,
Te6edf3altitudeTff7b72=T79c0ff0Tb4b4b4,
Te6edf3speedTff7b72=T79c0ff0Tb4b4b4,
Te6edf3bearingTff7b72=T79c0ff0Tb4b4b4,
Te6edf3accuracyTff7b72=T79c0ff0Tb4b4b4,
Te6edf3last_updateTff7b72=Tff7b72NoneTb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tb4b4b4[
Te6edf3structTff7b72.Td2a8ffpackTb4b4b4(Ta5d6ff"Ta5d6ff!iTa5d6ff"Tb4b4b4, Tffa657roundTb4b4b4(Te6edf3latitude Tff7b72* T79c0ff1e6Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3structTff7b72.Td2a8ffpackTb4b4b4(Ta5d6ff"Ta5d6ff!iTa5d6ff"Tb4b4b4, Tffa657roundTb4b4b4(Te6edf3longitude Tff7b72* T79c0ff1e6Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3structTff7b72.Td2a8ffpackTb4b4b4(Ta5d6ff"Ta5d6ff!iTa5d6ff"Tb4b4b4, Tffa657roundTb4b4b4(Te6edf3altitude Tff7b72* T79c0ff1e2Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3structTff7b72.Td2a8ffpackTb4b4b4(Ta5d6ff"Ta5d6ff!ITa5d6ff"Tb4b4b4, Tffa657roundTb4b4b4(Te6edf3speed Tff7b72* T79c0ff1e2Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3structTff7b72.Td2a8ffpackTb4b4b4(Ta5d6ff"Ta5d6ff!iTa5d6ff"Tb4b4b4, Tffa657roundTb4b4b4(Te6edf3bearing Tff7b72* T79c0ff1e2Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3structTff7b72.Td2a8ffpackTb4b4b4(Ta5d6ff"Ta5d6ff!HTa5d6ff"Tb4b4b4, Tffa657roundTb4b4b4(Te6edf3accuracy Tff7b72* T79c0ff1e2Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tffa657intTb4b4b4(Te6edf3last_updateTb4b4b4) Tff7b72if Te6edf3last_update Tff7b72is Tff7b72not Tff7b72None Tff7b72else Tffa657intTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72None
Tf0883e@staticmethod
Tff7b72def Td2a8fffrom_packedTb4b4b4(Te6edf3packedTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3p Tff7b72= Te6edf3umsgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3packedTb4b4b4)
Te6edf3res Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3SensorTff7b72.Td2a8ffSID_TIME Tff7b72in Te6edf3pTb4b4b4:
Te6edf3resTb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4: Te6edf3pTb4b4b4[Te6edf3SensorTff7b72.Td2a8ffSID_TIMETb4b4b4]Tb4b4b4}
Tff7b72if Te6edf3SensorTff7b72.Td2a8ffSID_LOCATION Tff7b72in Te6edf3pTb4b4b4:
Te6edf3resTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3TelemeterTff7b72.Td2a8ffunpack_locationTb4b4b4(Te6edf3pTb4b4b4[Te6edf3SensorTff7b72.Td2a8ffSID_LOCATIONTb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3SensorTff7b72.Td2a8ffSID_PHYSICAL_LINK Tff7b72in Te6edf3pTb4b4b4:
Te6edf3pl Tff7b72= Te6edf3pTb4b4b4[Te6edf3SensorTff7b72.Td2a8ffSID_PHYSICAL_LINKTb4b4b4]
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3plTb4b4b4, Tb4b4b4(Tffa657listTb4b4b4, Tffa657tupleTb4b4b4)Tb4b4b4) Tff7b72and Tffa657lenTb4b4b4(Te6edf3plTb4b4b4) Tff7b72>Tff7b72= T79c0ff3Tb4b4b4:
Te6edf3resTb4b4b4[Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Te6edf3plTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: Te6edf3plTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4: Te6edf3plTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4}
Tff7b72if Te6edf3SensorTff7b72.Td2a8ffSID_BATTERY Tff7b72in Te6edf3pTb4b4b4:
Te6edf3b Tff7b72= Te6edf3pTb4b4b4[Te6edf3SensorTff7b72.Td2a8ffSID_BATTERYTb4b4b4]
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3bTb4b4b4, Tb4b4b4(Tffa657listTb4b4b4, Tffa657tupleTb4b4b4)Tb4b4b4) Tff7b72and Tffa657lenTb4b4b4(Te6edf3bTb4b4b4) Tff7b72>Tff7b72= T79c0ff2Tb4b4b4:
Te6edf3resTb4b4b4[Ta5d6ff"Ta5d6ffbatteryTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffcharge_percentTa5d6ff"Tb4b4b4: Te6edf3bTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6ffchargingTa5d6ff"Tb4b4b4: Te6edf3bTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4}
T8b949e# Add other sensors as needed
Tff7b72return Te6edf3res
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72None
Tf0883e@staticmethod
Tff7b72def Td2a8ffpackTb4b4b4(Te6edf3time_utcTff7b72=Tff7b72NoneTb4b4b4, Te6edf3locationTff7b72=Tff7b72NoneTb4b4b4, Te6edf3batteryTff7b72=Tff7b72NoneTb4b4b4, Te6edf3physical_linkTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3p Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3pTb4b4b4[Te6edf3SensorTff7b72.Td2a8ffSID_TIMETb4b4b4] Tff7b72= Tffa657intTb4b4b4(Te6edf3time_utc Tff7b72if Te6edf3time_utc Tff7b72is Tff7b72not Tff7b72None Tff7b72else Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3locationTb4b4b4:
Te6edf3pTb4b4b4[Te6edf3SensorTff7b72.Td2a8ffSID_LOCATIONTb4b4b4] Tff7b72= Te6edf3TelemeterTff7b72.Td2a8ffpack_locationTb4b4b4(Tff7b72*Tff7b72*Te6edf3locationTb4b4b4)
Tff7b72if Te6edf3batteryTb4b4b4:
T8b949e# battery should be [charge_percent, charging]
Te6edf3pTb4b4b4[Te6edf3SensorTff7b72.Td2a8ffSID_BATTERYTb4b4b4] Tff7b72= Tb4b4b4[Te6edf3batteryTb4b4b4[Ta5d6ff"Ta5d6ffcharge_percentTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3batteryTb4b4b4[Ta5d6ff"Ta5d6ffchargingTa5d6ff"Tb4b4b4]Tb4b4b4]
Tff7b72if Te6edf3physical_linkTb4b4b4:
T8b949e# physical_link should be [rssi, snr, q]
Te6edf3pTb4b4b4[Te6edf3SensorTff7b72.Td2a8ffSID_PHYSICAL_LINKTb4b4b4] Tff7b72= Tb4b4b4[
Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4]
Tff7b72return Te6edf3umsgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3pTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────